﻿Imports System
Imports System.Text
Imports System.Collections.Generic
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports FrameworkTeste
Imports Spring.Objects.Factory.Xml
Imports Babok
Imports Financeiro
Imports ArtNoi
Imports Spring.Transaction
Imports Spring.Transaction.Interceptor

<TestClass()> Public Class RequisitosTeste
    Inherits TesteTransacionalInjecaoDependenciaSpring

#Region " ConfigLocations "

    Protected Overrides ReadOnly Property ConfigLocations() As String()
        Get
            NamespaceParserRegistry.RegisterParser(GetType(Spring.Data.Config.DatabaseNamespaceParser))
            Return New [String]() {"assembly://Teste.ArtNoi/Teste.ArtNoi/AutoWired.xml"}
        End Get
    End Property

#End Region

    Private testContextInstance As TestContext

    '''<summary>
    '''Gets or sets the test context which provides
    '''information about and functionality for the current test run.
    '''</summary>
    Public Property TestContext() As TestContext
        Get
            Return testContextInstance
        End Get
        Set(ByVal value As TestContext)
            testContextInstance = value
        End Set
    End Property

#Region "Additional test attributes"
    '
    ' You can use the following additional attributes as you write your tests:
    '
    ' Use ClassInitialize to run code before running the first test in the class
    '<ClassInitialize()> Public Shared Sub MyClassInitialize(ByVal testContext As TestContext)
    'End Sub
    '
    ' Use ClassCleanup to run code after all tests in a class have run
    ' <ClassCleanup()> Public Shared Sub MyClassCleanup()
    ' End Sub
    '
    ' Use TestInitialize to run code before running each test
    <TestInitialize()> Public Overloads Sub Initialize()
        MyBase.DefaultRollback = False
        MyBase.Initialize()
    End Sub
    '
    ' Use TestCleanup to run code after each test has run
    ' <TestCleanup()> Public Sub MyTestCleanup()
    ' End Sub
    '
#End Region

#Region "Particoes de Equivalencia"

    'EXEMPLO: Public Const Particao_XXX as String = " Select CAMPO_X from TABELA_Y "

#End Region

#Region "Classes Injetadas"

    Private _particaoEquivalencia As ParticaoEquivalencia
    Public Property ParticaoEquivalencia() As ParticaoEquivalencia
        Get
            Throw New NotImplementedException("Nao esqueca de implementar o codigo abaixo")
            '_particaoEquivalencia = New ParticaoEquivalencia("UMA_CONNECTION_NAME")
            Return _particaoEquivalencia
        End Get
        Set(ByVal value As ParticaoEquivalencia)
            _particaoEquivalencia = value
        End Set
    End Property

#End Region

#Region "Testes de Carga"

    <TestMethod()> Public Sub CargaFinanceiro()

        Dim _itemBackLog As ItemBackLog
        'ARTNOI ARTNOI ARTNOI ARTNOI 
        Dim _backlog As Backlog

        _backlog = New Backlog("Financeiro", _
                       "Conjunto de operações e processos que dê suporte ao controle de atividades financeiras envolvendo o negócio")

        _backlog.ItensPriorizados = New List(Of ItemPriorizado)

        '-----------
        _itemBackLog = New ItemBackLog With {.Titulo = "Condigurações de Base", _
                                             .EuComo = "Administrador do Sistema e Empresa", _
                                             .Quero = "Configurar os parâmetros básicos do Sistema", _
                                             .Para = "Garantir o comportamento e as informações adequadas a implantação local"}

        _itemBackLog.Requisitos = New List(Of Requisito)

        With _itemBackLog.Requisitos
            .Add(New Requisito("O nome e CNPJ da empresa é uma configuração básica do Sistema"))
            .Add(New Requisito("O usuário Master administrador é uma configuração básica do sistema"))
            .Add(New Requisito("Apontar o módulo financeiro para o módulo de produto controlado é uma configuração básica do Sistema"))
            .Add(New Requisito("Configurar o diretório de upload de imagens do sistema é uma configuração básica do sistema"))
            .Add(New Requisito("Configurar o SMTP de envio de e-mail é uma configuração básica do sistema"))
            .Add(New Requisito("Configurar o TimeStamp em todo sistema é uma configuração básica"))
            .Add(New Requisito("Cadastrar os endereços referente a empresa são configurações básicas"))
            .Add(New Requisito("Cada endereço da empresa pode ter uma ou N dependências"))
        End With

        _itemBackLog.Salvar()

        With _backlog.ItensPriorizados
            .Add(New ItemPriorizado(90, _itemBackLog))
        End With

        '-----------
        _itemBackLog = New ItemBackLog With {.Titulo = "Cadastro de Serviços", _
                                             .EuComo = "Gestor de Serviço", _
                                             .Quero = "Cadastrar os tipos de Serviço", _
                                             .Para = "Poder ter o controle de todos os serviços prestados pela empresa"}

        _itemBackLog.Requisitos = New List(Of Requisito)

        With _itemBackLog.Requisitos
            .Add(New Requisito("O serviço é uma descrição do serviço que pode ser prestado e faturado pela empresa"))
            .Add(New Requisito("Cada serviço pode ter um arquivo de procedimento anexado a sua descrição"))
            .Add(New Requisito("Cada serviço pode ou não ter um arquivo de norma anexado a sua descrição"))
            .Add(New Requisito("Cada serviço pode ou não ter uma política geral de atuação detalhada"))
        End With

        _itemBackLog.Salvar()

        With _backlog.ItensPriorizados
            .Add(New ItemPriorizado(90, _itemBackLog))
        End With

        '-----------
        _itemBackLog = New ItemBackLog With {.Titulo = "Cadastro de Ordem de Serviço", _
                                             .EuComo = "Vendedor", _
                                             .Quero = "Registrar uma Ordem de Serviço", _
                                             .Para = "Poder efetuar a venda de um serviço da loja"}

        _itemBackLog.Requisitos = New List(Of Requisito)

        With _itemBackLog.Requisitos
            .Add(New Requisito("Uma ordem de serviço deve selecionar um ou vários tipos de serviços a serem executados"))
            .Add(New Requisito("Uma ordem de serviço pode estar em algum dos estados: EmAberto, EmAtendimento, Atendido, Encerrado "))
            .Add(New Requisito("Cada Serviço ou tipo de serviço especificado, possui um item de serviço"))
            .Add(New Requisito("Uma ordem de serviço possui um Vendedor associado"))
            .Add(New Requisito("Uma ordem de serviço deve possuir uma data de criação"))
            .Add(New Requisito("Uma ordem de serviço deve possuir um local de execução"))
        End With

        _itemBackLog.Salvar()

        With _backlog.ItensPriorizados
            .Add(New ItemPriorizado(90, _itemBackLog))
        End With

        '-----------


        '-----------
        _itemBackLog = New ItemBackLog With {.Titulo = "Registrar a pendência e quitação dos a receber", _
                                             .EuComo = "Financeiro", _
                                             .Quero = "Registrar os 'A receber' dos clientes", _
                                             .Para = "Poder controlar os valores devidos e pagos"}

        _itemBackLog.Requisitos = New List(Of Requisito)

        With _itemBackLog.Requisitos
            .Add(New Requisito("Dado o valor do serviço, o usuário pode simular parcelamento N vezes a taxa de juros X"))
            .Add(New Requisito("Dado um valor presente (PV), os juros envolvidos (i), e o número de parcelas o sistema calcula o valor de cada parcela"))
            .Add(New Requisito("Dado um valor presente (PV), os juros envolvidos (i) e o valor da parcela o sistema calcula o número de parcelas"))
            'Calculadora de amortização
            'http://focalizaisso.com.br/amortizacao-de-financiamentos/&valor/
            'http://pt.wikipedia.org/wiki/Fluxo_de_caixa
            'http://www.epx.com.br/ctb/hp12c.php
            'http://pt.wikipedia.org/wiki/Matem%C3%A1tica_financeira
            'http://pt.wikipedia.org/wiki/Taxa_m%C3%ADnima_de_atratividade
            'http://pt.wikipedia.org/wiki/Custo_de_oportunidade
            'http://pt.wikipedia.org/wiki/Liquidez
            .Add(New Requisito("O usuário pode informar begin ou end para determinar o começo ou fim da aplicação"))
        End With

        _itemBackLog.Salvar()

        With _backlog.ItensPriorizados
            .Add(New ItemPriorizado(90, _itemBackLog))
        End With

        '-----------

    End Sub

    <TestMethod()> Public Sub CargaArtNoi()

        Dim _itemBackLog As ItemBackLog
        'ARTNOI ARTNOI ARTNOI ARTNOI 
        Dim _backlog As Backlog

        '-----------
        _backlog = New Backlog("Art Noivas - Vestuário", _
                               "Conjunto de operações de negócio para gestão de uma loja de aluguel de vestidos de noivas")

        _backlog.ItensPriorizados = New List(Of ItemPriorizado)

        _itemBackLog = New ItemBackLog With {.Titulo = "Cadastro de Vestidos", _
                                             .EuComo = "Gestor de Estoque", _
                                             .Quero = "Cadastrar Vestuário a ser alugado", _
                                             .Para = "Todo o estoque digitalizado e com isso iniciar a gestão das atividades de locação via sistema"}

        _itemBackLog.Requisitos = New List(Of Requisito)

        With _itemBackLog.Requisitos
            .Add(New Requisito("Toda roupa possui um código unívoco de controle, inserido manualmente, para controle extra-sistema"))
            .Add(New Requisito("O gestor de estoque pode associar uma determinada foto a roupa cadastrada"))
        End With


        _itemBackLog.Salvar()

        With _backlog.ItensPriorizados
            .Add(New ItemPriorizado(5, _itemBackLog))
        End With

        '-----------

    End Sub

    <TestMethod()> Public Sub CargaRequisitosBabok()

        'Dim _item As ItemBackLog
        'Dim _requisito As Requisito
        'Dim _verificacao As Verificacao
        'Dim _implementacao As Implementacao
        Dim _itemBackLog As ItemBackLog
        'Dim _itemUI As ItemUI
        'Dim _ui As UI

        'ARTNOI ARTNOI ARTNOI ARTNOI 
        Dim _backlog As Backlog

        _backlog = New Backlog("Ferramentas Scrum", _
                               "Conjunto de ferramentas para prática do Scrum")

        _backlog.ItensPriorizados = New List(Of ItemPriorizado)

        _itemBackLog = New ItemBackLog With {.Titulo = "Cadastro de Análises e Verificações", _
                                             .EuComo = "Gestor de Qualidade", _
                                             .Quero = "Cadastrar análises e verificações", _
                                             .Para = "Garantir e controlar a qualidade do produto, evitar retrabalho e defeitos e gerar um fluxo de trabalho de verificações rastreável"}

        _itemBackLog.Requisitos = New List(Of Requisito)

        With _itemBackLog.Requisitos
            .Add(New Requisito("O modelo deve desacoplar a Verificação do que é Verificado"))
            .Add(New Requisito("Uma Verificação é uma ordem que transita por vários estados"))
            .Add(New Requisito("Verificar é o ato de analisar algo. As Análises devem ser destinadas a várias partes do sistema"))
            .Add(New Requisito("Podemos analisar Requisito, UI, Classe, Módulo, ItemBacklog, Cenário de Teste, Dúvidas"))
            .Add(New Requisito("Ao criar uma Verificação o Usuário deve ou Requisito, ou UI, ou Classe, ou Módulo, ou ItemBacklog, ou Cenário de Teste, ou Dúvidas"))
            .Add(New Requisito("Uma Verificação do tipo Descrição pode ser cadastrada para um ItemBacklog"))
            .Add(New Requisito("Uma Verificação pode ser Manual ou Automática"))
            .Add(New Requisito("Toda Verificação deve conter o Usuário que cadastrou e Data e Hora de Cadastro"))
            .Add(New Requisito("Toda Verificação deve conter além do Onde (Módulo, Item, Classe), o OQue (Verificar <Onde> se <OQue>. O ideal é <ResultadoEsperado>)"))
            .Add(New Requisito("A Verificação pode ter status Ativa, Depreciada, Inativa"))
            .Add(New Requisito("A Verificação ao ser Excluída deve receber o Porquê e o Usuário que exclui."))
            .Add(New Requisito("A Verificação ao ser Concluída, deve receber o Porquê e o Usuário que concluiu."))
            .Add(New Requisito("Uma Verificação deve poder ser reutilizada"))
            .Add(New Requisito("Por Verificação Ativa entende-se como sendo uma Verificação vigente dentro do escopo de qualidade do produto"))
            .Add(New Requisito("Por Verificação Depreciada entende-se como sendo uma Verificação que deverá ser adaptada, ou evoluída"))
            .Add(New Requisito("Por Verificação Inativa entende-se como uma Verificação que já fez parte do escopo de qualidade mas não faz mais"))
            .Add(New Requisito("Uma Análise é a união de uma Verificação feita por um Usuário e o ResultadoObservado"))
            .Add(New Requisito("Uma Análise possui dois estados: EmAberto, Concluida, Reaberto ou Excluída"))
            .Add(New Requisito("Uma Análise sem Usuário e sem ResultadoObservado deve ficar no estado EmAberto"))
            .Add(New Requisito("Ao receber um Usuário e o ResultadoObservado a Análise passa ao estado de Concluida"))
            .Add(New Requisito("Um Usuário pode reabrir uma Análise se dela não houver uma Conclusão compreensível. A Análise passa para status Reaberto"))
            .Add(New Requisito("A leitura de Reaberto é que haverá um retrabalho devido a falha na comunicação"))
            .Add(New Requisito("Uma lista de Análises no status de Concluída significa um trabalho de verificação da qualidade realizado"))
        End With


        _itemBackLog.Salvar()

        With _backlog.ItensPriorizados
            .Add(New ItemPriorizado(99, _itemBackLog))
        End With

        '-----------
        _itemBackLog = New ItemBackLog With {.Titulo = "Cadastro de Backlog", _
                             .EuComo = "Gestor de Projetos e Gestor de Qualidade", _
                             .Quero = "Cadastrar Backlog", _
                             .Para = "Agrupar itens de backlog"}

        _itemBackLog.Requisitos = New List(Of Requisito)

        With _itemBackLog.Requisitos
            .Add(New Requisito("Um Backlog deve possuir o Nome do Produto e a Descrição do Produto"))
            .Add(New Requisito("Um Backlog deve possuir uma lista de ItensPriorizados"))
            .Add(New Requisito("Um ItemPriorizado possui um Item de Backlog, a prioridade do Item, a Complexidade em numeral e o número de pontos que representa"))
            .Add(New Requisito("Um ItemPriorizado item priorizado quando cadastrado, por default possui prioridade 999"))
            .Add(New Requisito("Em um Backlog é possível adicionar ou remover um dado ItemPriorizado"))
            .Add(New Requisito("Um ItemPriorizado deve permitir a alteração da sua prioridade"))
            .Add(New Requisito("Um ItemPriorizado possui status de: NaoIniciado, EmAberto, EmAndamento, Impedido, Concluido"))
            .Add(New Requisito("Um ItemPriorizado deve possuir data de Início e Fim do Item, que podem ser preenchidas ou não"))
            .Add(New Requisito("Um ItemPriorizado pode ter impedimentos"))
            .Add(New Requisito("Um ItemPriorizado está Impedido quando possui um ou mais Impedimento(s) no estado EmAberto"))
            .Add(New Requisito("Um Impedimento deve ter Motivo, o autor que o registrou e a data e hora de registro"))
            .Add(New Requisito("Um Impedimento pode assumir estado de EmAberto e Resolvido"))
        End With


        _itemBackLog.Salvar()


        With _backlog.ItensPriorizados
            .Add(New ItemPriorizado(99, _itemBackLog))
        End With

        '---------
        _itemBackLog = New ItemBackLog With {.Titulo = "Cadastro de Item Backlog", _
                                     .EuComo = "Gestor de Projetos e Gestor de Qualidade", _
                                     .Quero = "Cadastrar projeto", _
                                     .Para = "Vincular todos os controles e artefatos produzidos ao decorrer dos projetos"}

        _itemBackLog.Requisitos = New List(Of Requisito)

        With _itemBackLog.Requisitos
            .Add(New Requisito("O modelo deve permitir o formato padrão de estórias, ou seja, identificar Eu, Como, Quero."))
            .Add(New Requisito("Todo Item Backlog deve pertencer a um ou mais Backlogs."))
            .Add(New Requisito("Todo Item Backlog deve possuir o Usuário que cadastrou e a Data e Hora que foi Cadastrado."))
        End With


        _itemBackLog.Salvar()

        With _backlog.ItensPriorizados
            .Add(New ItemPriorizado(99, _itemBackLog))
        End With

        '-----------
        _itemBackLog = New ItemBackLog With {.Titulo = "Cadastro de Cenários e Casos de Teste", _
                             .EuComo = "Gestor de Projetos e Gestor de Qualidade", _
                             .Quero = "Cadastrar Cenários e Casos de Teste", _
                             .Para = "Controlar todos os Cenários e Casos de Teste que contribuíram com a qualidade final do produto e acompanhar o andamento do projeto"}

        _itemBackLog.Requisitos = New List(Of Requisito)

        With _itemBackLog.Requisitos
            '.Add(New Requisito(""))
            .Add(New Requisito("Um CasoDeTeste pertence a um CenárioDeTeste"))
            .Add(New Requisito("Um CenarioDeTeste possui zero ou N Casos de Teste"))
            .Add(New Requisito("Um CenárioDeTeste possui um ItemBacklog que o originou"))
            .Add(New Requisito("Um CenárioDeTeste pode estar ligado a uma UI"))
        End With


        _itemBackLog.Salvar()


        With _backlog.ItensPriorizados
            .Add(New ItemPriorizado(99, _itemBackLog))
        End With

        '---------

        _backlog.Salvar()

        'Dim _itemBackLog02 As ItemBackLog

        '_itemBackLog02 = New ItemBackLog With {.Titulo = "Cadastro de Anúncio", _
        '                                     .EuComo = "Particular ou Lojista", _
        '                                     .Quero = "Cadastrar anúncios", _
        '                                     .Para = "expor no site"}


        '_itemBackLog02.Requisitos = New List(Of Requisito)

        'With _itemBackLog02.Requisitos
        '    .Add(New Requisito("Anúncio só será publicado se tiver crédito disponível"))
        '    .Add(New Requisito("Anúncio só será publicado se For usuário com perfil: Cliente ou Lojista"))
        '    .Add(New Requisito("Anúncio só será publicado se For aprovado pela moderação"))
        '    .Add(New Requisito("No caso de PF, poderá cadastrar até 3 ou 5 anuncios (definir)"))
        'End With

        '_itemBackLog02.Salvar()

        'Me.CargaInicial()

        Assert.IsTrue(_itemBackLog.Id.HasValue)

        '_verificacao = New Verificacao(_requisito, _usuario, _ui, _comentario, _status)
        '_verificacao = New Verificacao(_requisito, _usuario, _ui, _itens, _comentario, _status)

        '_implementacao = New Implementacao(_usuario, _verificacao)

        '_implementacao = New Implementacao(_usuario, _requisito)


    End Sub

#End Region

#Region "Testes Venda"

    <TestMethod()> _
    Public Sub SalvarVenda()
        Dim _Venda As Global.ArtNoi.Venda
        _Venda = New Global.ArtNoi.Venda

        _Venda.Salvar()

        Assert.IsTrue(_Venda.Id.HasValue)
    End Sub

#End Region

#Region "Testes Vestuario"

    Private Function CarregarTipo(ByRef _nomeTipoVestuario As String) As TipoVestuario

        Dim _TipoVestuario As TipoVestuario

        _TipoVestuario = New TipoVestuario
        _TipoVestuario.Nome = _nomeTipoVestuario
        _TipoVestuario.Salvar()

        Return _TipoVestuario

    End Function

    Private Function CarregarVestuario(ByRef _nomeTipoVestuario As String) As Vestuario

        Dim _Vestuario As Vestuario
        Dim _TipoVestuario As TipoVestuario

        _TipoVestuario = New TipoVestuario
        _TipoVestuario.Nome = _nomeTipoVestuario
        _Vestuario = New Vestuario
        _Vestuario.Codigo = "212"
        _Vestuario.TipoVestuario = _TipoVestuario
        _TipoVestuario.Salvar()

        Return _Vestuario

    End Function

    <ExpectedException(GetType(ArtNoiException))> _
    <TestMethod()> _
    Public Sub SalvarVestuarioSemTipo_Negativo()

        Dim _Vestuario As Vestuario

        _Vestuario = New Vestuario

        _Vestuario.Salvar(Nothing)

        Assert.IsTrue(_Vestuario.Id.HasValue)

    End Sub

    <TestMethod()> _
    Public Sub SalvarTipoVestuario()

        Dim _TipoVestuario As TipoVestuario

        _TipoVestuario = New TipoVestuario
        _TipoVestuario.Nome = "Vestido"

        _TipoVestuario.Salvar()

        Assert.IsTrue(_TipoVestuario.Id.HasValue)

    End Sub

    <ExpectedException(GetType(ArtNoiException))> _
    <TestMethod()> _
    Public Sub SalvarTipoVestuario_Negativo()

        Dim _TipoVestuario As TipoVestuario

        _TipoVestuario = New TipoVestuario
        _TipoVestuario.Nome = String.Empty

        _TipoVestuario.Salvar()

        Assert.IsTrue(_TipoVestuario.Id.HasValue)

    End Sub

    <ExpectedException(GetType(ArtNoiException))> _
    <TestMethod()> _
    Public Sub SalvarVestuarioComTipo_Negativo()
        Dim _Vestuario As Vestuario
        Dim _tipo As TipoVestuario

        _tipo = New TipoVestuario

        _Vestuario = CarregarVestuario("Noiva")
        _Vestuario.Salvar(_tipo)

        Assert.IsTrue(_Vestuario.Id.HasValue)

    End Sub

    <TestMethod()> _
    Public Sub SalvarVestuarioComTipo()
        Dim _Vestuario As Vestuario
        Dim _tipo As TipoVestuario

        _tipo = New TipoVestuario

        _tipo = CarregarTipo("TERNO")
        _Vestuario = CarregarVestuario("Noiva")
        _Vestuario.Salvar(_tipo)

        Assert.IsTrue(_Vestuario.Id.HasValue)

    End Sub

#End Region

#Region "Testes Contrato"

    <ExpectedException(GetType(ArtNoiException))> _
<TestMethod()> _
Public Sub SalvarContrato_NEGATIVO()
        Dim _Contrato As Contrato
        _Contrato = New Contrato

        _Contrato.Salvar(Nothing, Nothing, Nothing)

        Assert.Fail("Deveria ter estourado uma exception")
    End Sub

    Protected Function SalvarUmCliente() As Cliente

        Dim _Cliente As Cliente

        _Cliente = New Cliente
        _Cliente.Nome = "Cliente " & Now.ToString

        _Cliente.Salvar()

        Return _Cliente

    End Function

    <ExpectedException(GetType(ArtNoiException))> _
    <TestMethod()> _
Public Sub SalvarContrato_Sem_Vestuario_NEGATIVO()
        Dim _cliente As Cliente
        Dim _Contrato As Contrato
        Dim _loja As New Loja
        _loja.Nome = "artnoi1"
        _loja.CNPJ = "123123123"

        _cliente = Me.SalvarUmCliente
        _Contrato = New Contrato

        _Contrato.Cliente = _cliente
        _Contrato.Salvar(_cliente, _loja, Nothing)

        Assert.Fail("Deveria dar uma exceção")
    End Sub

    <TestMethod()> _
    Public Sub SalvarContrato()
        Dim _cliente As Cliente
        Dim _vestuario1 As Vestuario
        Dim _vestuario2 As Vestuario
        Dim _listaVestuario As IList(Of Vestuario)
        Dim _Contrato As Contrato
        Dim _tipo As TipoVestuario
        Dim _loja As New Loja
        Dim _endereco As New Endereco
        Dim _listEndLoja As New List(Of Endereco)


        _endereco.Logradouro = "RUA A"
        _endereco.Bairro = "CENTRO"
        _endereco.Cidade = "RJ"
        _endereco.UF = "RJ"
        _endereco.Salvar()
        _listEndLoja.Add(_endereco)

        _loja.Enderecos = _listEndLoja
        _loja.Nome = "artnoi2"
        _loja.CNPJ = "12432432"
        _loja.Salvar()
        _tipo = CarregarTipo("TERNO")
        _vestuario1 = Me.CarregarVestuario("Terno")
        _vestuario1.Salvar(_tipo)
        _vestuario2 = Me.CarregarVestuario("VestidoSocial")
        _vestuario2.Salvar(_tipo)
        _listaVestuario = New List(Of Vestuario)
        _listaVestuario.Add(_vestuario1)
        _listaVestuario.Add(_vestuario2)

        _cliente = Me.SalvarUmCliente
        _Contrato = New Contrato

        _Contrato.Cliente = _cliente
        _Contrato.Vestuarios = _listaVestuario
        _Contrato.Salvar(_cliente, _loja, _listaVestuario)

        Assert.IsTrue(_Contrato.Id.HasValue)
    End Sub

    <ExpectedException(GetType(ArtNoiException))> _
    <TestMethod()> _
Public Sub SalvarContratoSemCliente_01_NEGATIVO()

        Dim _vestuario1 As Vestuario
        Dim _vestuario2 As Vestuario
        Dim _listaVestuario As IList(Of Vestuario)
        Dim _Contrato As Contrato
        Dim _tipo As TipoVestuario
        Dim _loja As New Loja

        _loja.Nome = "artnoi2"
        _loja.CNPJ = "2131231"

        _vestuario1 = CarregarVestuario("Vestido")
        _vestuario2 = CarregarVestuario("VestidoDama")
        _tipo = Me.CarregarTipo("VESTIDO")

        _listaVestuario = New List(Of Vestuario)
        _listaVestuario.Add(_vestuario1)
        _listaVestuario.Add(_vestuario2)

        _Contrato = New Contrato
        _Contrato.Vestuarios = _listaVestuario

        _vestuario1.Salvar(_tipo)
        _vestuario2.Salvar(_tipo)
        _Contrato.Salvar(Nothing, _loja, _listaVestuario)

        Assert.IsTrue(_Contrato.Id.HasValue)

    End Sub

    <ExpectedException(GetType(ArtNoiException))> _
    <TestMethod()> _
Public Sub SalvarContratoSemCliente_02_NEGATIVO()

        Dim _cliente As Cliente
        Dim _vestuario1 As Vestuario
        Dim _vestuario2 As Vestuario
        Dim _listaVestuario As IList(Of Vestuario)
        Dim _Contrato As Contrato
        Dim _tipo As TipoVestuario
        Dim _loja As New Loja

        _loja.Nome = "ArtNoivas"
        _loja.CNPJ = "12312312321"


        _tipo = Me.CarregarTipo("CALCA")
        _vestuario1 = Me.CarregarVestuario("Terno")
        _vestuario2 = Me.CarregarVestuario("VestidoNoiva")
        _listaVestuario = New List(Of Vestuario)
        _listaVestuario.Add(_vestuario1)
        _listaVestuario.Add(_vestuario2)

        _cliente = New Cliente

        _Contrato = New Contrato
        _Contrato.Cliente = _cliente
        _Contrato.Vestuarios = _listaVestuario
        _Contrato.Loja = _loja

        _vestuario1.Salvar(_tipo)
        _vestuario2.Salvar(_tipo)

        _Contrato.Salvar(Nothing, _loja, _listaVestuario)

        Assert.IsTrue(_Contrato.Id.HasValue)

    End Sub

    <ExpectedException(GetType(ArtNoiException))> _
  <TestMethod()> _
    Public Sub SalvarContratoSemLoja_01_NEGATIVO()
        Dim _cliente As Cliente
        Dim _vestuario1 As Vestuario
        Dim _vestuario2 As Vestuario
        Dim _listaVestuario As IList(Of Vestuario)
        Dim _Contrato As Contrato
        Dim _tipo As TipoVestuario


        _tipo = Me.CarregarTipo("CALCA")
        _vestuario1 = Me.CarregarVestuario("Terno")
        _vestuario2 = Me.CarregarVestuario("VestidoNoiva")
        _listaVestuario = New List(Of Vestuario)
        _listaVestuario.Add(_vestuario1)
        _listaVestuario.Add(_vestuario2)

        _cliente = New Cliente

        _Contrato = New Contrato
        _Contrato.Cliente = _cliente
        _Contrato.Vestuarios = _listaVestuario

        _vestuario1.Salvar(_tipo)
        _vestuario2.Salvar(_tipo)

        _Contrato.Salvar(_cliente, Nothing, _listaVestuario)
    End Sub

    <TestMethod()> _
    Public Sub BuscarContrato()
        Dim _nomeCliente As String
        _nomeCliente = "Bruno"
        Dim _contrato As New Contrato

        '_contrato.Buscar(

    End Sub

#End Region

#Region "Testes Loja"

    <TestMethod()> _
Public Sub SalvarLoja()
        Dim _Loja As Loja

        Dim _enderecos As New List(Of Global.ArtNoi.Endereco)
        Dim _endereco As New Global.ArtNoi.Endereco

        _endereco.Bairro = "Flamengo"
        _endereco.CEP = "22210060"
        _endereco.Cidade = "Rio de Janeiro"
        _endereco.Complemento = "apto 1218"
        _endereco.Logradouro = "Rua Almirante Tamandaré"
        _endereco.Numero = "66"
        _endereco.UF = "RJ"
        _endereco.Salvar()
        _enderecos.Add(_endereco)

        _Loja = New Loja
        _Loja.CNPJ = "125522/0001-43"
        _Loja.Nome = "Art Noivas Loja 1"

        _Loja.Enderecos = _enderecos
        _Loja.Salvar()

        Assert.IsTrue(_Loja.Id.HasValue)
    End Sub

    <TestMethod()> _
    Public Sub SalvarLojaEndereco()

        Dim _loja As New Loja
        Dim _enderecos As New List(Of Global.ArtNoi.Endereco)
        Dim _endereco As New Global.ArtNoi.Endereco

        _endereco.Bairro = "Flamengo"
        _endereco.CEP = "22210060"
        _endereco.Cidade = "Rio de Janeiro"
        _endereco.Complemento = "apto 1218"
        _endereco.Logradouro = "Rua Almirante Tamandaré"
        _endereco.Numero = "66"
        _endereco.UF = "RJ"
        _endereco.Salvar()
        _loja.CNPJ = "125522/0001-43"
        _loja.Nome = "Art Noivas Loja 1"
        _enderecos.Add(_endereco)
        _loja.Enderecos = _enderecos
        _loja.Salvar()

        Assert.IsTrue(_loja.Id.HasValue)

    End Sub

    <ExpectedException(GetType(ArtNoiException))> _
    <TestMethod()> _
    Public Sub SalvarLojaSemEndereco_Negativo()

        Dim _loja As New Loja
        _loja.CNPJ = "12550001/343"
        _loja.Nome = "Art Noivas Loja 1"
        _loja.Salvar()

        Assert.Fail("Deveria dar uma exceção")

    End Sub

    <ExpectedException(GetType(ArtNoiException))> _
    <TestMethod()> _
    Public Sub SalvarLojaSemCNPJ_Negativo()
        Dim _enderecos As New List(Of Global.ArtNoi.Endereco)
        Dim _endereco As New Global.ArtNoi.Endereco
        Dim _loja As New Loja

        _endereco.Bairro = "Flamengo"
        _endereco.CEP = "22210060"
        _endereco.Cidade = "Rio de Janeiro"
        _endereco.Complemento = "apto 1218"
        _endereco.Logradouro = "Rua Almirante Tamandaré"
        _endereco.Numero = "66"
        _endereco.UF = "RJ"


        _loja.CNPJ = String.Empty
        _loja.Nome = "Art Noivas Loja 1"
        _endereco.Salvar()
        _enderecos.Add(_endereco)
        _loja.Enderecos = _enderecos

        _loja.Salvar()

        Assert.Fail("Deveria dar uma exceção")
    End Sub

    <ExpectedException(GetType(ArtNoiException))> _
    <TestMethod()> _
    Public Sub SalvarLojaSemNome_Negativo()

        Dim _enderecos As New List(Of Global.ArtNoi.Endereco)
        Dim _endereco As New Global.ArtNoi.Endereco
        Dim _loja As New Loja

        _endereco.Bairro = "Flamengo"
        _endereco.CEP = "22210060"
        _endereco.Cidade = "Rio de Janeiro"
        _endereco.Complemento = "apto 1218"
        _endereco.Logradouro = "Rua Almirante Tamandaré"
        _endereco.Numero = "66"
        _endereco.UF = "RJ"


        _loja.CNPJ = "1234565"
        _loja.Nome = String.Empty
        _enderecos.Add(_endereco)
        _loja.Enderecos = _enderecos

        _loja.Salvar()

        Assert.Fail("Deveria dar uma exceção")

    End Sub




#End Region

#Region "Testes Funcionario"

    <TestMethod()> _
Public Sub SalvarFuncionario()

        Dim _Funcionario As Funcionario
        _Funcionario = New Funcionario

        _Funcionario.Nome = "Funcionário Novo"

        _Funcionario.Salvar()

        Assert.IsTrue(_Funcionario.Id.HasValue)

    End Sub

    <ExpectedException(GetType(ArtNoiException))> _
    <TestMethod()> _
    Public Sub SalvarFuncionario_Negativo()

        Dim _Funcionario As Funcionario
        _Funcionario = New Funcionario

        _Funcionario.Nome = String.Empty

        _Funcionario.Salvar()

        Assert.IsTrue(_Funcionario.Id.HasValue)

    End Sub

    <TestMethod()> _
    Public Sub BuscarFuncionarioPorCpf()
        Dim _Funcionario As New Funcionario
        Dim _Funcionarios As List(Of Funcionario)

        _Funcionario.Nome = "LenhadoraDoInferno"
        _Funcionario.CPF = "06969947637"
        _Funcionario.Salvar()

        _Funcionarios = _Funcionario.BuscarPorCPF("06969947637")

        Assert.IsTrue(_Funcionarios.Count > 0)
    End Sub

    <TestMethod()> Public Sub BuscarFuncionarioPorCpf_Negativo()

        Dim _Funcionario As New Funcionario
        Dim _Funcionarios As List(Of Funcionario)

        _Funcionarios = _Funcionario.BuscarPorCPF("123543544")

        Assert.IsTrue(_Funcionarios.Count = 0)

    End Sub

    <TestMethod()> _
Public Sub BuscarFuncionarioPorNome()
        Dim _Funcionario As New Funcionario
        Dim _Funcionarios As List(Of Funcionario)

        _Funcionario.Nome = "LenhadoraDoInferno"
        _Funcionario.CPF = "06969947637"
        _Funcionario.Salvar()

        _Funcionarios = _Funcionario.BuscarPorNome("LenhadoraDoInferno")

        Assert.IsTrue(_Funcionarios.Count > 0)
    End Sub

    <TestMethod()> Public Sub BuscarFuncionarioPorNome_Negativo()

        Dim _Funcionario As New Funcionario
        Dim _Funcionarios As List(Of Funcionario)

        _Funcionarios = _Funcionario.BuscarPorNome("JesusMariquinha")

        Assert.IsTrue(_Funcionarios.Count = 0)

    End Sub

#End Region

#Region "Testes Cliente"

    <TestMethod()> _
Public Sub SalvarContatoCliente()

        Dim _cliente As New Cliente
        Dim _telefone As New Telefone
        Dim _email As New Email
        Dim _redeSocial As New RedeSocial
        Dim _contatos As New List(Of Contato)
        Dim _endereco As New Endereco
        Dim _enderecos As New List(Of Endereco)
        _endereco.UF = "MG"
        _endereco.Logradouro = "RUA A"
        _endereco.Cidade = "Varginha"
        _endereco.Numero = "121"
        _enderecos.Add(_endereco)
        _cliente.CPF = "98765432111"
        _cliente.Nome = "Cliente de contato"

        _telefone.DDD = "21"
        _telefone.Numero = "99999-4444"
        _telefone.Tipo = TipoTelefone.Celular

        _email.Endereco = "teste@artnoi.com.br"

        _redeSocial.Facebook = "facebook.com/artnoi"
        _redeSocial.Twitter = "twitter.com/artnoi"


        _contatos.Add(_telefone)
        _contatos.Add(_email)
        _contatos.Add(_redeSocial)

        _cliente.Enderecos = _enderecos
        _cliente.Contatos = _contatos


        _cliente.Salvar()

        Assert.IsTrue(_cliente.Id.HasValue)

    End Sub

    <TestMethod()> Public Sub BuscarClientesPorNome()

        Dim _cliente As New Cliente
        Dim _clientes As List(Of Cliente)

        _cliente.Nome = "Jesus"
        _cliente.Salvar()

        _clientes = _cliente.BuscarPorNome("Jesus")

        Assert.IsTrue(_clientes.Count > 0)

    End Sub

    <TestMethod()> Public Sub BuscarClientesPorNome_Negativo()

        Dim _cliente As New Cliente
        Dim _clientes As List(Of Cliente)

        _clientes = _cliente.BuscarPorNome("XPTO")

        Assert.IsTrue(_clientes.Count = 0)

    End Sub

    <TestMethod()> Public Sub BuscarClientesPorCpf()

        Dim _cliente As New Cliente
        Dim _clientes As List(Of Cliente)

        _cliente.Nome = "ClienteZeRuela"
        _cliente.CPF = "12345679"
        _cliente.Salvar()

        _clientes = _cliente.BuscarPorCPF("12345679")

        Assert.IsTrue(_clientes.Count > 0)

    End Sub

    <TestMethod()> Public Sub BuscarClientesPorCpf_Negativo()

        Dim _cliente As New Cliente
        Dim _clientes As List(Of Cliente)

        _clientes = _cliente.BuscarPorCPF("6543212")

        Assert.IsTrue(_clientes.Count = 0)

    End Sub

    <TestMethod()> Public Sub BuscarClientesPorRG()

        Dim _cliente As New Cliente
        Dim _clientes As List(Of Cliente)

        _cliente.Nome = "ClienteZeRuela"
        _cliente.CPF = "12345679"
        _cliente.RG = "10581913"
        _cliente.Salvar()

        _clientes = _cliente.BuscarPorRG("10581913")

        Assert.IsTrue(_clientes.Count > 0)

    End Sub

    <TestMethod()> Public Sub BuscarClientesPorRG_Negativo()

        Dim _cliente As New Cliente
        Dim _clientes As List(Of Cliente)

        _clientes = _cliente.BuscarPorRG("6543212")

        Assert.IsTrue(_clientes.Count = 0)

    End Sub

    <TestMethod()> _
    Public Sub SalvarPessoaClienteEndereco()

        Dim _cliente As New Cliente
        Dim _enderecos As New List(Of Global.ArtNoi.Endereco)
        Dim _endereco As New Global.ArtNoi.Endereco

        _endereco.Bairro = "Flamengo"
        _endereco.CEP = "22210060"
        _endereco.Cidade = "Rio de Janeiro"
        _endereco.Complemento = "apto 121999"
        _endereco.Logradouro = "Rua Almirante Tamandaré manééééééglégléglé"
        _endereco.Numero = "66"
        _endereco.UF = "RJ"

        _cliente.CPF = "123456789999"
        _cliente.Nome = "Cliente da Loja"

        _enderecos.Add(_endereco)

        _cliente.Enderecos = _enderecos

        _cliente.Salvar()

        Assert.IsTrue(_cliente.Id.HasValue)

    End Sub

#End Region

#Region "Testes ErrorLog"

    <TestMethod()> Public Sub SalvarErrorLog()

        Dim _errorLog As ErrorLog

        _errorLog = New ErrorLog(New NotImplementedException)

        _errorLog.Salvar()

        _errorLog = New ErrorLog(New ArtNoiException("Teste de ErrorLog"))

        _errorLog.Salvar()

        Assert.IsTrue(True)

    End Sub

#End Region

End Class